BREAKING CHANGE for 2019.3.15 - 2019.3.16
$where in Workflow Engine API Calls
Due to a vulnerability with MongoDB, the $where
key is no longer supported as part of the query object for several API calls. The $where
key is specifically used in MongoDB to support a JavaScript expression or function to be used as part of a query. Any APIs that were vulnerable to the usage of $where
will now return with an error if $where
is included in the query. The following APIs are affected by this, with the relevant parameter noted for each.
API | Parameter |
---|---|
POST /workflow_engine/getJobFromTaskQuery | task_query |
POST /workflow_engine/queryJobs | query |
POST /workflow_engine/jobs/find | query |
POST /workflow_engine/queryTasksBrief | query |
POST /workflow_engine/getTask | query |
BREAKING CHANGE for 2019.3.0-2019.3.7 -> 2019.3.8
The following are breaking changes for the 2019.3.8 release.
Migration of array.toString Tasks to objectToString
For workflows using the array.toString
task that was migrated or saved in a released version of IAP between 2019.3.0 and 2019.3.7, the array.toString
task has now been migrated to objectToString
. Between IAP versions 2019.3.0 and 2019.3.7, the array.toString
task was changed to include two additional parameters and a slightly different output. Starting with IAP version 2019.3.8, the functionality of array.toString
was reverted to the functionality that was prior to IAP version 2019.3.0. In other words, regarding the array.toString
task, there is no longer a breaking change from 2019.2 workflows to its 2019.3 equivalent; however, in making this change, any workflows that intentionally used the new output of array.toString
will now be broken as a result of this change. Accordingly, the next section outlines how to find and fix this scenario.
Manual Steps for Migrated Workflows
For workflows where the array.toString
to objectToString
migration is breaking, a script is now provided to find workflows that contain a specific task (this task can be used to find any task as the need arises). Follow the steps below to find all workflows that contain objectToString
and manually update any that are breaking.
Download the following script:
Note: This script is also found on an installed version of 2019.3.8 in:
/opt/pronghorn-core/node_modules/@itential/app-workflow_engine/migration_scripts/
Place the script in the following location (on the migrated environment that includes the 2019.3.8 maintenance release):
/opt/pronghorn-core/node_modules/@itential/app-workflow_engine/migration_scripts/
Run the script to find all workflows that contain the
objectToString
task.cd /opt/pronghorn-core/node_modules/@itential/app-workflow_engine/migration_scripts/ node findWorkflowTasks.js objectToString
If necessary, update any workflow tasks that are now breaking by replacing them with
array.ToString
.Update any tasks that reference the output of
array.ToString
that have not been updated already by setting the reference task dropdown tostringified
.Update any template variables that reference the previous
arrayString
output ofarray.ToString
to now referencestringified
. Remember to check any and all references that can occur subsequent to thearray.toString
task.
BREAKING CHANGE for 2019.3.5 -> 2019.3.6
RabbitMQ Properties Moved from Service Config to Profile
Upon upgrade to the 2019.3.6 maintenance bundle, the RabbitMQ properties will be automatically moved from all service configs to the profile. Additionally, these settings will be changed in the database; therefore all systems that share this database connection will be affected also. Please note, if you have a disaster recovery (DR) system in your setup, the changes made to the database will take effect once the first system is updated and affect all systems using that database. This basically means that all systems will need to be upgraded at the same time.
Rollback Instructions
Since the RabbitMQ properties will be auto-migrated from the service config to the profile, if a rollback is necessary, those properties must be restored manually to each relevant service config prior to upgrade.
BREAKING CHANGE for 2019.3.1/2019.3.2 -> 2019.3.3
The following are breaking changes for the 2019.3.3 release.
Important Note
It is the policy of Itential not to cause any breaking changes within the maintenance releases of a major release version; however, at times we have to do so and we extend our sincere apologies when those times occur. It is also our sincere hope that this breaking change was caught early enough so that most will not be affected.
Please note, Itential is removing two features:
- Translations, and
- Multiple job variables on the "Outgoing" tab of automatic tasks.
If you had previously elected not to utilize either of those features, then the steps shown below do not apply, and there is no need for you to complete them. As a best practice, however, there is no harm in double-checking to be sure whether or not this breaking change impacts you in any way.
Removing the Translations Feature
For the 2019.3.0 IAP release, Itential deprecated all the global object methods (string, number, etc.) in Workflow Builder and replaced them with a 'translations' feature. Once that deprecation was made, Itential heard from many customers that the manual effort to replace all those methods would be a very large one with the toolset that is provided. With that level of effort in mind, and our commitment to provide customers with the best user experience possible, Itential has decided to un-deprecate those methods in the 2019.3.3 maintenance patch.
Once you update to 2019.3.3 or higher, the methods will no longer be deprecated or have to be replaced. Please note, however, the new translations feature will be removed, which means you cannot use translations in your new workflows on development servers. The global object methods will become available beginning with IAP 2020.1.
Manual Steps to Ensure Database Integrity
Automations (within the Automation Studio) no longer allow tasks that export more than one job variable or that attach translations to exported job variables within automations. Workflow Engine will not support running automations with tasks that have translations on your outgoing data, or export more than one job variable as outgoing data. In the 2019.3.3 maintenance release, Workflow Engine will not start if it finds an automation that meets these conditions.
These automations need to be corrected manually. Use the following process:
On a system that is running 2019.3.1 or 2019.3.2 (prior to updating):
Download the following two scripts:
Note: These scripts are also found on an installed version of 2019.3.3 in:
/opt/pronghorn-core/node_modules/@itential/app-workflow_engine/migration_scripts/
Place the script files in the following location of a 2019.3.1 or 2019.3.2 system:
/opt/pronghorn-core/node_modules/@itential/app-workflow_engine/migration_scripts/
Run the script to find automations that have incompatible tasks.
cd /opt/pronghorn-core/node_modules/@itential/app-workflow_engine/migration_scripts/ node compatibilityCheck20193Maintenance.js
The output of the script will indicate which automations need to be corrected.
IMPORTANT: The correction must occur on a system running 2019.3.1 or 2019.3.2.
After all automations have been updated, run the script again to ensure they are compliant.
Once compliant, proceed with the update to 2019.3.3.
Sample Output
$ cd /opt/pronghorn-core/node_modules/@itential/app-workflow_engine/migration_scripts/
$ node compatibilityCheck20193Maintenance.js
incompatibleWorkflow contains incompatible tasks:
getAdaptersForDevice (508a)
Task Summary: exports more than one job variable
Reason: Task exports more than one job variable, each of which may or may not have translations attached to it.
locateDevices (e7c)
Task Summary: exports a job variable with a translation
Reason: Task exports a job variable with a translation attached to it.
locateDevices (37ec)
Task Summary: exports more than one job variable with translations
Reason: Task exports more than one job variable, each of which may or may not have translations attached to it.
RunCommand (2aed)
Task Summary: exports more than one job var with no translations
Reason: Task exports more than one job variable, each of which may or may not have translations attached to it.
Note: For ease of reference, the script output provides the name of the automation, e.g.,
incompatibleWorkflow
, and the taskname, e.g.,getAdaptersForDevice
andlocateDevices
.
This compatibility check script inspects all the automations in your IAP deployment and will deem an automation incompatible if it contains any tasks that:
Export more than one job variable (each of which may or may not have a translation).
Export a job variable with a translation.
Modify the Automation to Fix Incompatibility
To fix the first case, modify the automation so that the tasks exporting more than one job variable now:
Only export a single job variable without any translations.
Use the
newVariable
task to instantiate the number of job variables that the incompatible task created.Use the appropriate tasks from
Number
,Object
,String
, andArray
to perform data manipulation on created job variables (if necessary).
Modify the Task to Fix Incompatibility
To fix the second case, the task on an incompatible automation should be modified such that:
It still exports a single job variable via its outgoing data.
All translations are removed.
The appropriate tasks from
Number
,Object
,String
, andArray
are used to modify the exported job variable the same way that the translation did.
As stated above, once all workflows have been cleared of any tasks that have multiple job variables defined or have a translation, the update to 2019.3.3 is cleared to proceed.
BREAKING CHANGE for 2019.3.2 and below -> 2019.3.3
Job Manager Database Enhancement
The following procedure is only necessary if upgrading from 2019.3.2 or lower to release version 2019.3.3 or higher. If you have already performed these steps in an update to 2019.3.3 or above, then this procedure is not needed. There is no harm, however, in double-checking to be sure whether or not these steps may apply.
As part of an ongoing effort to always provide the best performance within IAP, this maintenance release contains a migration script which will optimize the jobs data to allow faster queries against the collection. There are two possible methods to run this migration:
npm run normalizeGroups
from theapp-workflow_engine
directory. The script will modify each job within the database, so depending on the number of jobs it may take 5 - 15 mins to complete. This is the slowest method because it is run from the IAP server and is only recommended for instances where the jobs collection is moderately sized (low 10Ks number of records).Download the normalizeGroups.js script and run it on the MongoDB server via the command line. For example:
mongo mongodb://HOSTS:PORT/DATABASE?replicaSet=rs_pronghorn --authenticationDatabase admin -u USER -p PASS < normalizeGroups.js
. Tailor the MongoDB URI to your environment. This method is much faster and is recommended for large jobs collections.
These changes should not have any impact on your usage of Job/Task history.
Note: With this breaking change, it is very important that you ensure all indexes are setup correctly on Jobs and Tasks. This can be done by running the
npm run index
command from withinapp-workflow_engine
. If you are missing any indexes, it may take 15-30 mins to complete the index creation on large databases. Lastly, always make sure you have a full MongoDB backup of your database before upgrading.
BREAKING CHANGES for 2019.2.* -> 2019.3
The following are breaking changes for the 2019.3 release.
app-workflow_engine
Removed the deprecated APIs for startJob
, getCompletedJobs
and getJobById
. For replacement information, go to the Deprecations guide in Product Notices and see the Methods > Workflow Engine page.
app-workflow_builder
Removed the deprecated APIs for getWorkflowsFiltered
and getWorkflowsList
. For replacement information, go to the Deprecations guide in Product Notices and see the Methods > Workflow Builder page for IAP versions 2019.2 and below.
Updated Interface
The interface for both the workflow builder and list of workflows is now accessed through Automation Studio. There is no longer a shortcut icon on the IAP dashboard for this application. Go to Automation Studio to enjoy the exciting changes for automation creation!
app-form_builder
Updated Interface
The interface for both form builder and the list of forms is now accessed through Automation Studio. There is no longer a shortcut icon on the IAP dashboard for this application. Be sure to check out Automation Studio for form creation!
app-mop (Command Templates)
Updated Interface
The interface for both command templates and analytic templates is now accessed through Automation Studio. There is no longer a shortcut icon on the IAP dashboard for this application. Automation Studio is now your go-to for command and analytic template creation!
Removed Deprecated APIs
The methods following methods have been removed from app-mop
(Command Templates) and are no longer available in the platform beginning in IAP 2019.3: executeShell
, getBootFlash
, getMOP
, list
, outputDiff
, runCommand
, setBoot (/copyImage)
, Wait
.
app-template_builder
New Format of Jinja2 Templates Prior to Maintenance Release 2019.2.4
Although many will view this as an improvement, for those who have been using this relatively new feature, we would be remiss if we did not notify you of this change. In maintenance release 2019.2.4, the template provided in the Template Builder user interface no longer requires an opinionated reference to the 'data' variable. Before the change, you could supply any JSON, and then reference it in the template as "data.whatever." After the change, you can only supply a JSON object, and you no longer need to use the data prefix in the template. You can just reference the object properties identified in the JSON object by name directly. We feel this ease of use improvement warrants a change notice and aligns with the overall user experience within our product. We also hope to have caught this early enough to not have caused too much rework. If you have any templates built before the 2019.2.4 maintenance release, please update them as well as their corresponding JSON data object to match the new interface.
Updated Interface
The interface for viewing and building templates is now accessed through Automation Studio. There is no longer an icon on the IAP dashboard for this application. We're confident you'll enjoy the exciting changes in Automation Studio for template creation!
app-array
This application has been completely removed, and all tasks previously within this application have been moved inside of app-workflow_engine (which appears under the 'WorkFlowEngine' heading within the Workflow Builder Task list). The previous routes inside app-array
will not exist, and no new routes have been created to replace them. Tasks will still appear under the Array tab.
app-json
This application has been completely removed, and all tasks previously within this application have been moved inside of app-workflow_engine (which appears under the 'WorkFlowEngine' heading within the Workflow Builder Task list). The previous routes inside app-json
will not exist, and no new routes have been created to replace them. The JSON tab has also been removed. Stringify
has been moved to the Object tab and renamed to toString
. Parse
has been moved to the String tab.
The Object.toString
and Parse
tasks will be automatically migrated so no manual intervention is needed, and the workflow will behave the same as it did in 2019.2.
app-number
This application has been completely removed, and all tasks previously within this application have been moved inside of app-workflow_engine (which appears under the 'WorkFlowEngine' heading within the Workflow Builder Task list). The previous routes inside app-number
will not exist, and no new routes have been created to replace them. Tasks will still appear under the Number tab.
The tasks in app-number
will be automatically migrated so no manual intervention is needed, and the workflow will behave the same as it did in 2019.2.
app-object
This application has been completely removed, and all tasks previously within this application have been moved inside of app-workflow_engine (which appears under the 'WorkFlowEngine' heading within the Workflow Builder Task list). The previous routes inside app-object
will not exist, and no new routes have been created to replace them. Tasks will still appear under the Object tab.
The tasks in app-object
will be automatically migrated so no manual intervention is needed, and the workflow will behave the same as it did in 2019.2.
app-string
This application has been completely removed, and all tasks previously within this application have been moved inside of app-workflow_engine (which appears under the 'WorkFlowEngine' heading within the Workflow Builder Task list). The previous routes inside app-string
will not exist, and no new routes have been created to replace them. Tasks will still appear under the String tab.
app-tools
This application has been completely removed, and all tasks previously within this application have been moved inside of app-workflow_engine (which appears under the 'WorkFlowEngine' heading within the Workflow Builder Task list). The previous routes inside app-tools
will not exist, and no new routes have been created to replace them. The one exception to this is diffToHTML
, which has changed its route from /tools/diffToHTML
to /workflow_engine/diffToHTML
and has been deprecated. Tasks will still appear under the Tools tab.
The tasks in app-tools
will automatically migrate so no manual intervention is needed, and the workflow will behave the same as it did in 2019.2.
app-configuration_manager
Changed getDevicesFiltered
to now require the 'limit' property. Previously if the 'limit' property was not provided or if 'limit=0' then the result would yield all devices. If there were a high number of devices, then this would cause timeouts or exception errors. For system integrity, we have removed the capability to list all.
Tags Application
Updated Interfaces
Both createTag
and createTags
were updated to handle additional cases not previously covered. Both functions now return an error object for negative cases.
Error Object Returned
{
code,
message: {
error,
[dataName]: data,
},
}
Error Object Part | Description |
---|---|
code |
The error code when an error is processed (presently set to 422 for all errors). |
error |
A string containing the reason for the error. |
[dataName] |
The particular data element related to the error. |
Rules for createTag
- A tag name must have four (4) characters or more, or an error object is returned.
- If the tag object contains an ID, the ID is stripped away and a new one is created if all previous and remaining tag creation rules pass.
- A tag with the same name will cause an error object to be returned.
Rules for createTags
- The interface now checks for the object type to be an array of tag objects or it will return an error object.
- All tag names must be four (4) characters or more, or an error object is returned.
- If a tag object contains an ID, the ID is stripped away and a new one is created if all previous and remaining tag creation rules pass.
- The submitted tags array is examined for duplicates. Only the non-duplicates are added after passing the previous rules.